package com.net.filter;

import java.io.NotSerializableException;
import java.io.Serializable;
import java.nio.charset.Charset;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;

public class HeaderEncoder extends ProtocolEncoderAdapter {
	private final Charset charset;

	public HeaderEncoder(Charset charset) {
		this.charset = charset;
	}

    private int maxObjectSize = 10240; // 2GB



    /**
     * Returns the allowed maximum size of the encoded object.
     * If the size of the encoded object exceeds this value, this encoder
     * will throw a {@link IllegalArgumentException}.  The default value
     * is {@link Integer#MAX_VALUE}.
     */
    public int getMaxObjectSize() {
        return maxObjectSize;
    }

    /**
     * Sets the allowed maximum size of the encoded object.
     * If the size of the encoded object exceeds this value, this encoder
     * will throw a {@link IllegalArgumentException}.  The default value
     * is {@link Integer#MAX_VALUE}.
     */
    public void setMaxObjectSize(int maxObjectSize) {
        if (maxObjectSize <= 0) {
            throw new IllegalArgumentException("maxObjectSize: "
                    + maxObjectSize);
        }

        this.maxObjectSize = maxObjectSize;
    }

    public void encode(IoSession session, Object message,
            ProtocolEncoderOutput out) throws Exception {
//        if (!(message instanceof Serializable)) {
//            throw new NotSerializableException();
//        }
//
//        IoBuffer buf = IoBuffer.allocate(64);
//        buf.setAutoExpand(true);
//        buf.putObject(message);
//
//        int objectSize = buf.position() - 4;
//        if (objectSize > maxObjectSize) {
//            throw new IllegalArgumentException(
//                    "The encoded object is too big: " + objectSize + " (> "
//                            + maxObjectSize + ')');
//        }
//
//        buf.flip();
        out.write(message);
        out.flush();
    }

}
